/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.base.domain.query;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;

/**
 *
 *
 * @author zgy
 * @date 2021-9-22
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class GoodsQuery {

    private static final int DEFAULT_PAGE_SIZE = 20;
    private static final int MAX_PAGE_SIZE = 1000;

    /**
     * 返回记录的起始位置。
     */
    private Integer offset;

    /**
     * 返回记录的个数。
     */
    private Integer rows;

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     */
    public GoodsQuery(Integer pageIndex) {
        this(pageIndex, DEFAULT_PAGE_SIZE);
    }

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     * @param    pageSize    页大小
     */
    public GoodsQuery(Integer pageIndex, Integer pageSize) {
        int index = pageIndex == null ? 0 : pageIndex;
        int size = pageSize == null ? MAX_PAGE_SIZE : pageSize;
        this.offset = index * size;
        this.rows = size;
    }

    /**
     * 构造符合条件的查询对象，仅返回一条
     *
     * @return
     */
    public static GoodsQueryBuilder one() {
        return GoodsQuery.builder().offset(0).rows(1);
    }

    /**
     * 构造符合条件的查询对象，控制返回的记录上限
     *
     * @return
     */
    public static GoodsQueryBuilder max() {
        return GoodsQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
    }

    /**
     * 货品Id
     */
    private Long goodsId;
    /**
     * 货号
     */
    private String goodsCode;
    /**
     *
     */
    private Collection<String> goodsCodeList;
    /**
     * 货号
     */
    private String goodsFullCode;
    /**
     *
     */
    private Collection<String> goodsFullCodeList;
    /**
     * 货品名称
     */
    private String goodsName;
    /**
     * 货品简称
     */
    private String goodsAbbr;
    /**
     * 中文名称
     */
    private String goodsChineseName;
    /**
     * 单位
     */
    private String unit;
    /**
     * 供应商Id
     */
    private Long supplierId;
    /**
     * 原始货号（需脱敏）
     */
    private String originalGoodsCode;
    /**
     * 货主Id
     */
    private Long goodsOwnerId;
    /**
     * 分类
     */
    private String category;
    /**
     * 保质期
     */
    private Integer qualityGuaranteePeriod;
    /**
     * 保质期单位：1-天，2-月，3-年
     */
    private String qualityGuaranteePeriodUnit;
    /**
     * 配送需求
     */
    private String deliveryRequirement;
    /**
     * 储存要求
     */
    private String storageRequirement;
    /**
     * 货期下限
     */
    private Integer productionDateLower;
    /**
     * 货期上限
     */
    private Integer productionDateUpper;
    /**
     * 货期单位：1-时，2-天，3-周，4-月
     */
    private String productionDateUnit;
    /**
     * 状态：0-存盘，1-启用，2-停用
     */
    private Integer status;
    /**
     * 租户Id，0表示不指定
     */
    private Long tenantId;

}
